/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import DAO.util.ConectaBanco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import model.Login;

/**
 *
 * @author Alex
 */
public class LoginDAO {

    public boolean criar(Login login) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "insert into login(username, senha,id_aluno,status) values (?,?,?,1)";
            // seta os parametros no sql
            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setString(1, login.getUsuario());
            pstmt.setString(2, login.getSenha());
            pstmt.setInt(3,login.getAluno().getId());
       

            System.out.println(sql);
            pstmt.execute();

            conexao.close();
            return true;

        } catch (SQLException sql) {

            return false;

        }

    }

    public ArrayList<Login> buscarTodas(String nome) throws ClassNotFoundException {
        ArrayList<Login> logins = new ArrayList<Login>();
        Connection conexao = null;
        try {
            conexao = ConectaBanco.getConexao();
            String sql = "select * from login where username ilike ? and status = 1";


            PreparedStatement pst = conexao.prepareStatement(sql);

            pst.setString(1, nome + "%");
            ResultSet rs = pst.executeQuery();
            PessoaDAO dao = new PessoaDAO();
            AlunoDAO alunoDAO = new AlunoDAO();


            while (rs.next()) {
                Login login = new Login();
                login.setId(rs.getInt("id"));
                login.setUsuario(rs.getString("username"));
                login.setSenha(rs.getString("senha"));
                login.setAluno(alunoDAO.buscarPessoaByCodigo(rs.getInt("id_aluno")));
    

                logins.add(login);
            }
            conexao.close();
            return logins;

        } catch (SQLException sql) {
            return null;
        }

    }

    public Login buscarLoginByCodigo(int codigo) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select * from login where id=? and status=1");
        sql.setInt(1, codigo);
        ResultSet resultado = sql.executeQuery();
        Login login = new Login();
        AlunoDAO alunoDAO = new AlunoDAO();
        while (resultado.next()) {
            login.setId(resultado.getInt("id"));
       
            login.setUsuario(resultado.getString("username"));
            login.setSenha(resultado.getString("senha"));
            login.setAluno(alunoDAO.buscarPessoaByCodigo(resultado.getInt("id_aluno")));
        }
        conexao.close();
        return login;
    }

    public boolean atualizar(Login login) {
        try {
            Connection conexao = ConectaBanco.getConexao();

            String sql = "update login set username=?, senha=? where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);
            pstmt.setString(1, login.getUsuario());
            pstmt.setString(2, login.getSenha());
            pstmt.setInt(3, login.getId());

            System.out.println(sql);
            pstmt.execute();
            System.out.println("Cadastro realizado com sucesso");            
            conexao.close();
            return true;
        } catch (SQLException sql) {
            System.out.println("Erro ao atualizar registro");
            sql.printStackTrace();
            return false;

        }
    }

    public boolean marcarInativo(int id) {
        try {
            System.out.println("id no marcar inativo"+id);
            Connection conexao = ConectaBanco.getConexao();
           
            String sql = "update login set status=0 where id=?";

            PreparedStatement pstmt = conexao.prepareCall(sql);

            pstmt.setInt(1,id);


            pstmt.execute();
            //out.println("Cadastro realizado com sucesso");            
            conexao.close();
            return true;
        } catch (Exception e) {
            System.out.println("Erro ao marcar inativo"+ e.getMessage());
            return false;

        }
    }



    public boolean login(String userName, String senha) throws SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select id from login where username =? and senha=?");
        sql.setString(1, userName);
        sql.setString(2, senha);
        ResultSet resultado = sql.executeQuery();
        resultado.next();
        int id = resultado.getInt("id");
        conexao.close();
        System.out.println("Teste do número do ID " + id);

        if (id != 0) {
            return true;
        } else {
            return false;
        }



    }

    public Login buscarLogin(String userName, String senha) throws ClassNotFoundException, SQLException {
        Connection conexao = ConectaBanco.getConexao();
       
        PreparedStatement sql = conexao.prepareStatement("select * from login where username =?  and senha=?");
        
        sql.setString(1, userName);
        sql.setString(2, senha);
        
        ResultSet resultado = sql.executeQuery();
        
        resultado.next();
        Login login = new Login();
       // AlunoDAO alunoDAO = new AlunoDAO();
        System.out.println("número do id do login "+ resultado.getInt("id"));
        login.setId(resultado.getInt("id"));
        
        login.setUsuario(resultado.getString("username"));
        login.setSenha(resultado.getString("senha"));
       // login.setAluno(alunoDAO.buscarPessoaByCodigo(resultado.getInt("id_login")));

        conexao.close();
        return login;
   



    }

    public int buscarId(int idpessoa) throws SQLException {
        Connection conexao = ConectaBanco.getConexao();
        PreparedStatement sql = conexao.prepareStatement("select id from login where id_pessoa =? ");
        sql.setInt(1, idpessoa);

        ResultSet resultado = sql.executeQuery();
        resultado.next();
        int id = resultado.getInt("id");

        conexao.close();
        return id;



    }
}
